package storage

import (
	"fmt"
	"time"
	"skedule-backend/database"
	"skedule-backend/utils"
)

// Task 任务结构 (保持与database.Task一致)
type Task = database.Task

// TaskStore 任务存储
type TaskStore struct {
	// 可以添加连接池等配置
}

var (
	taskStore     *TaskStore
)

// NewTaskStore 创建任务存储实例
func NewTaskStore() (*TaskStore, error) {
	if taskStore == nil {
		taskStore = &TaskStore{}
	}
	return taskStore, nil
}

// CreateTask 创建任务
func (s *TaskStore) CreateTask(task *Task) error {
	// 设置时间
	now := time.Now()
	task.CreatedAt = now
	task.UpdatedAt = now

	// 保存到数据库
	return database.DB.Create(task).Error
}

// UpdateTask 更新任务
func (s *TaskStore) UpdateTask(task *Task) error {
	// 更新时间
	task.UpdatedAt = time.Now()

	// 更新数据库
	return database.DB.Save(task).Error
}

// DeleteTask 删除任务
func (s *TaskStore) DeleteTask(id string) error {
	return database.DB.Where("id = ?", id).Delete(&Task{}).Error
}

// GetTask 获取单个任务
func (s *TaskStore) GetTask(id string) (*Task, error) {
	task := &Task{}
	err := database.DB.First(task, "id = ?", id).Error
	if err != nil {
		return nil, fmt.Errorf(utils.T("task.not.found"), id)
	}
	return task, nil
}

// GetAllTasks 获取所有任务
func (s *TaskStore) GetAllTasks() []*Task {
	var tasks []*Task
	database.DB.Find(&tasks)
	return tasks
}

// UpdateTaskStatus 更新任务状态
func (s *TaskStore) UpdateTaskStatus(id string, enabled bool) error {
	return database.DB.Model(&Task{}).Where("id = ?", id).Updates(map[string]interface{}{
		"enabled":    enabled,
		"updated_at": time.Now(),
	}).Error
}

// UpdateTaskRunTime 更新任务运行时间
func (s *TaskStore) UpdateTaskRunTime(id string, lastRun, nextRun time.Time) error {
	return database.DB.Model(&Task{}).Where("id = ?", id).Updates(map[string]interface{}{
		"last_run":   lastRun,
		"next_run":   nextRun,
		"updated_at": time.Now(),
	}).Error
} 